home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Light ROM 1
/
LIGHT-ROM 1 (Amiga Library Services)(1994).iso
/
ffdisks
/
d875.lha
/
Blanker
/
Source.lha
/
Source
/
main.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-05-24
|
6KB
|
208 lines
/** DoRev Header ** Do not edit! **
*
* Name : main.c
* Copyright : Free Software
* Creation date : 12-May-93
* Translator : SAS/C 6.2
* Compiler opts. : See Makefile
*
* Date Rev Author Comment
* --------- --- ------------------- ----------------------------------------
* 22-May-93 1 Michael D. Bayne Removed mouse blanker
* 12-May-93 0 Michael D. Bayne Startup & utility code for Blanker
*
*** DoRev End **/
#include <exec/types.h>
#include <exec/memory.h>
#include <exec/ports.h>
#include <dos/dos.h>
#include <dos/dostags.h>
#include <intuition/intuition.h>
#include <graphics/displayinfo.h>
#include <libraries/reqtools.h>
#include <clib/exec_protos.h>
#include <clib/dos_protos.h>
#include <clib/graphics_protos.h>
#include <clib/alib_protos.h>
#include <clib/utility_protos.h>
#include "defs.h"
#include "Blanker.h"
/* Program revision tag. */
STATIC const UBYTE VersTag[] = "\0$VER: "BVERSION" (5.22.93)";
/* Prototypes */
LONG handleCxMess( void );
LONG SetupCX( void );
LONG UpdateCX( void );
void ShutdownCX( void );
void defBlanker( void );
void setPrefs( struct bPrefObject *, UBYTE );
void loadPrefs( UBYTE *, UBYTE *, struct bPrefObject * );
void savePrefs( UBYTE *, UBYTE *, struct bPrefObject * );
extern ULONG cxSigFlag, cxBlankFlag;
extern UBYTE prefName[], prefDir[], modInfo[];
ULONG blankSig, validPrefs;
struct ReqToolsBase *ReqToolsBase;
struct Library *CxBase, *IconBase;
struct Task *Task = 0L, *bTask = 0L;
struct MsgPort *blankerPort, *modulePort = 0L;
struct bMessage bMsg;
struct bPrefObject bPrefs = { 0x00008004, 4, 1800, "shift F2", "shift F1", FALSE, "Moire", "Blankers" };
struct Screen *bScr;
struct NewBroker nbBroker = { NB_VERSION, "Blanker", BVERSION, "A system friendly screen blanker",
NBU_UNIQUE|NBU_NOTIFY, COF_SHOW_HIDE, 0, 0, 0 };
int getBlanker( void )
{
UBYTE path[256];
struct bMessage *rMsg;
BPTR checkExists;
CopyMem( bPrefs.modDir, path, 108 );
if( !AddPart( path, bPrefs.modName, 256 )) return( 0 );
if( !modulePort ) {
if( checkExists = Open( path, MODE_OLDFILE ) ) {
Close( checkExists );
SystemTags( path, NP_FreeSeglist, TRUE, SYS_Asynch, TRUE, SYS_Input,
Open( "NIL:", MODE_OLDFILE ), SYS_Output, Open( "NIL:", MODE_OLDFILE ), TAG_END );
WaitPort( blankerPort );
rMsg = ( struct bMessage * )GetMsg( blankerPort );
modulePort = ( struct MsgPort * )rMsg->bMess.mn_ReplyPort;
bTask = ( struct Task * )rMsg->prefData;
ReplyMsg(( struct Message * )rMsg );
return( 1 );
} else return( 0 );
} else return( 1 );
}
void getInfo( UBYTE *Info )
{
if( getBlanker()) {
if( bPrefs.resident ) bMsg.bm_Type = BM_INFO;
else bMsg.bm_Type = BM_INFO|BM_QUIT;
bMsg.bm_Valid = validPrefs;
bMsg.prefData = bPrefs.prefData;
PutMsg( modulePort, ( struct Message * )( &bMsg ));
WaitPort( blankerPort );
GetMsg( blankerPort );
CopyMem( bMsg.prefData, Info, 64 );
if( !bPrefs.resident ) modulePort = 0l;
} else CopyMem( "Simple Blanker", Info, 15 );
}
void callBlanker( void )
{
if( getBlanker()) {
if( bPrefs.resident ) bMsg.bm_Type = BM_BLANK;
else bMsg.bm_Type = BM_BLANK|BM_QUIT;
bMsg.bm_Valid = validPrefs;
bMsg.sMod = bPrefs.sMod;
bMsg.sDep = bPrefs.sDep;
bMsg.prefData = bPrefs.prefData;
PutMsg( modulePort, ( struct Message * )( &bMsg ));
if( !bPrefs.resident ) modulePort = 0l;
WaitPort( blankerPort );
GetMsg( blankerPort );
} else defBlanker();
}
LONG openMainWindow( void )
{
if( !BlankerWnd ) {
if( SetupScreen()) return( 1 );
OpenBlankerWindow();
CloseDownScreen();
}
if( !BlankerWnd ) return( QUIT );
getInfo( modInfo );
setPrefs( &bPrefs, Blanker_CNT );
return( OK );
}
void exitBlanker( LONG exitValue )
{
if( modulePort ) {
bMsg.bm_Type = BM_UNLOAD;
PutMsg( modulePort, ( struct Message * )( &bMsg ));
WaitPort( blankerPort );
GetMsg( blankerPort );
}
switch( exitValue ) {
case 0L:
CloseBlankerWindow();
DeletePort( blankerPort );
case 1L:
ShutdownCX();
case 2L:
FreeSignal( blankSig );
case 3L:
CloseLibrary(( struct Library * )ReqToolsBase );
case 4L:
CloseLibrary( IconBase );
case 5L:
CloseLibrary( CxBase );
case 6L:
CloseLibrary(( struct Library * )GfxBase );
case 7L:
CloseLibrary( GadToolsBase );
case 8L:
CloseLibrary(( struct Library * )IntuitionBase );
}
}
void main( int argc, char *argv[] )
{
ULONG sigs;
LONG retval = 1;
UBYTE **ttypes;
if(!( IntuitionBase = ( struct IntuitionBase * )OpenLibrary( "intuition.library", 37L ))) exitBlanker( 9L );
if(!( GfxBase = ( struct GfxBase * )OpenLibrary( "graphics.library", 37L ))) exitBlanker( 8L );
if(!( GadToolsBase = OpenLibrary( "gadtools.library", 37L ))) exitBlanker( 7L );
if(!( CxBase = OpenLibrary( "commodities.library", 37L ))) exitBlanker( 6L );
if(!( IconBase = OpenLibrary( "icon.library", 36L ))) exitBlanker( 5L );
if(!( ReqToolsBase = ( struct ReqToolsBase * )OpenLibrary( REQTOOLSNAME, REQTOOLSVERSION )))
exitBlanker( 4L );
Task = FindTask( 0L );
if( ttypes = ArgArrayInit( argc, argv )) {
nbBroker.nb_Pri = ( BYTE )ArgInt( ttypes, "CX_PRIORITY", 0 );
if( !Stricmp( ArgString( ttypes, "CX_POPUP", "no" ), "yes" )) retval = 5;
ArgArrayDone();
} else nbBroker.nb_Pri = 0;
if(( blankSig = ( ULONG )AllocSignal( -1L )) == -1 ) exitBlanker( 3L );
cxBlankFlag = 1L << blankSig;
if(!( SetupCX())) exitBlanker( 2L );
loadPrefs( "Blanker.prefs", "ENV:", &bPrefs );
if(!( blankerPort = CreatePort( "BlankerCC", 0 ))) exitBlanker( 1L );
bMsg.bMess.mn_ReplyPort = blankerPort;
bMsg.bMess.mn_Length = sizeof( struct bMessage );
UpdateCX();
if( retval == 5 ) retval = openMainWindow();
while( retval ) {
sigs = Wait( SIG_BREAK | cxSigFlag | cxBlankFlag | SIG_WINDOW );
if( sigs & SIG_WINDOW ) retval = HandleBlankerIDCMP();
if( sigs & cxSigFlag ) retval = handleCxMess();
if( sigs & cxBlankFlag ) callBlanker();
if( sigs & SIG_BREAK ) retval = 0L;
if( retval == CLOSEWIN ) CloseBlankerWindow();
}
exitBlanker( 0L );
}